package com.example.zz.example.pattern.singleton;

import android.app.Activity;
import android.os.Bundle;
import androidx.annotation.Nullable;

import com.example.zz.example.R;

/**
 * Created by zhangzhuo.
 * Blog: https://blog.csdn.net/zhangzhuo1024
 * Date: 2020/4/30
 *
 * 单例作用：一个类仅有一个实例，所有的访问都通过这个实例进行，避免频繁的创建和销毁实例造成的浪费
 *
 * 单例模式反序列化时问题，单例模式序列化之后传输出去，再进行反序列化生成原来的单例时，会通过反射实例化一个新的对象，所以不是单例了
 * 解决方案是添加readResolve, 参考HungrySingle中的添加，https://blog.csdn.net/leo187/article/details/104332138
 *
 */
public class SingletonActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_singleton);

        findViewById(R.id.hungry).setOnClickListener(v -> {
            HungrySingle.getsInstance().doSomething();
            String s = "" ;
            char[] chars = s.toCharArray();
        });

        findViewById(R.id.lazy).setOnClickListener(v -> {
            LazySingle.getsInstance().doSomething();
        });

        findViewById(R.id.lock_lazy).setOnClickListener(v -> {
            LockLazySingle.getsInstance(this).doSomething();
        });

        findViewById(R.id.static_singleton).setOnClickListener(v -> {
            StaticSingle.getsInstance().doSomething();
        });

        findViewById(R.id.enum_singleton).setOnClickListener(v -> {
            EnumSingle.INSTANCE.doSomething();
        });
    }
}
